from re import S
from flask import Blueprint,request,jsonify,json #导入蓝图

import random #导入random模块 用于生成验证码

from rediscon import r #导入封装好的redis文件

from db import db1

from werkzeug.security import generate_password_hash,check_password_hash #密码加密导包  generate_password_hash以hash的方式生成密码

bp_user=Blueprint('user',__name__) #实例化蓝图

#发送验证码接口
@bp_user.route('/smscode')
def smscode():
    #获取前端传递的手机号
    mobile=request.args.get('mobile')
    #生成验证码  生成五位的
    code=str(random.randint(10000,99999))
    #把验证码存入redis 手机号是键(key) 验证码是值(value) 过期时间 时间限制60秒之内
    r.set_str(mobile,code,60)
    #返回结果
    return jsonify({'code':200,'scode':code})

#用户注册接口
@bp_user.route('/userM',methods=['POST'])
def userM():
    # 获取用户输入
    data=request.data
    if data:
        data=json.loads(request.data)
    else:
        data=request.form
    # 验证码验证 1.通过手机号去redis中取验证码 2.对比 
    code=r.get_str(data['mobile'])
    # 查看验证码是否过期
    if not code:
        return jsonify({'code':10010,'mes':'验证码已经过期,请重新发送'})
    if code != data['code']:
        return jsonify({'code':10011,'mes':'输入的验证码不正确'})
    # 手机号唯一验证
    sql="select id from user where mobile='%s'"%(data['mobile'])
    res=db1.find(sql)
    if res:
        return jsonify({'code':10012,'mes':'手机号已经存在,不能重复注册'})
    # 注册 写入用户表
    sql="insert into user values(0,'%s','%s')"%(data['mobile'],generate_password_hash(data['password']))
    db1.insert(sql)
    # 返回结果
    return jsonify({'code':200})

# 用户登录接口
@bp_user.route('/login',methods=['POST'])
def login():
    # 获取前端传来的数据
    data=request.data
    if data:
        data=json.loads(request.data)
    else:
        data=request.form
    #根据手机号查询
    sql="select * from user where mobile='%s'"%(data['mobile'])
    res=db1.find(sql)
    #假如密码存在，和之前的密码进行比对 check_password_hash比对密码需要传两个参数 第一个传之前数据库里存的加密过的密码 第二个传前端刚发送过来的密码
    if res:
        if check_password_hash(res['password'],data['password']):
            #密码正确返回id.mobile
            return jsonify({'code':200,'id':res['id'],'mobile':res['mobile']})
        else:
            return jsonify({'code':10010,'mes':'密码错误'})
    else:
        return jsonify({'code':10011,'mes':'用户不存在'})

@bp_user.route('/userlist')
def userlist():
    sql="select * from user order by id desc"
    res=db1.findall(sql)
    return jsonify({'code':200,'list':res})